// 进行axios二次封装：使用请求与响应拦截器
import axios from "axios";
import { ElMessage } from "element-plus";
import useUserStore from "@/store/modules/user";
import { GET_TOKEN, REMOVE_TOKEN } from '@/utils/token';

let token = GET_TOKEN()

//创建axios实例
let request = axios.create({
    // 基础路径上会携带/api
    baseURL: import.meta.env.VITE_APP_BASE_API,
    timeout: 50000000, // 超时时间设置，
    headers: {
        'Authorization': `Bearer ${token}`,
    }
})
//请求拦截器
request.interceptors.request.use(config => {
    // config配置对象，headers属性请求头，经常给服务器端携带公共参数x
    let userStore = useUserStore()
    if (userStore.token) {
        console.log('----------------------请求拦截器----------------------')
        config.headers.token = userStore.token
    }
    // 返回配置对象
    return config;
});
// 响应拦截器
request.interceptors.response.use((response) => {
    console.log('----------------------响应拦截器----------------------', response.data)
    return response.data;
}, (error) => {
    //处理网络错误
    let msg = error.response.data.message;
    // 错误状态码
    let status = error.response.data.code;
    console.log('错误状态码：', status)
    console.log('错误状态码：', msg)
    const userStore = useUserStore();
    // 状态码匹配暂时停用，由于后端返回的信息中会有状态码和错误信息，所以这里暂时停用状态码的判断
    if (status == '10101' || status == '10102' && !userStore.token) {
        console.log('token过期或未登录，清除pinia仓库的token')
        // token过期或未登录
        // 清除pinia仓库的token
        userStore.token = ''
        userStore.username = '未登录'
        userStore.avatar = ''
        // 清除本地存储的token
        REMOVE_TOKEN()
        // 弹出提示信息
        ElMessage.error(msg);
    } else if (status !== '10101' || status == '10102') {
        // 除了token问题外，全局提示错误信息
        ElMessage.error(msg);
    }
    // ElMessage({
    //     type: 'error',
    //     message: msg + '11'
    // })
    return Promise.reject(error);
});

// 对外暴露
export default request;
